from django.http import HttpRequest, HttpResponse
from django.shortcuts import render, redirect
from django.views.decorators.http import require_http_methods

from server.apps.main.logic.todo import queries as post_queries
from server.apps.main.logic.usecases import create_new_todo, delete_todo, find_todo, edit_todo, set_done_and_return

def index(request: HttpRequest) -> HttpResponse:
    """
    Main (or index) view.

    Returns rendered default page to the user.
    Typed with the help of ``django-stubs`` project.
    """
    return render(request, 'main/index.html')

@require_http_methods(['GET'])
def redirect_view(request: HttpRequest) -> HttpResponse:
	return redirect('/index/')

def todo_view(request: HttpRequest) -> HttpResponse:
    todos = {} 
    text4search = ''
    if request.method == "POST": 
        if "Find" in request.POST: #проверяем метод добавления todo
            text4search=request.POST.get('text4search')        
            todos=find_todo.run(text=text4search)  
        if "Done" in request.POST:
            todos=set_done_and_return.run(
                id=request.POST.get('Done')
            )
            return render(request, "main/view-todo.html", {"todos": todos,"temptext":text4search})
        if "Delete" in request.POST: #если пользователь собирается удалить одно дело
            delete_todo.run(request.POST.get('Delete'))
            return render(request, "main/view-todo.html", {"todos": todos,"isdel": "Delete"})
    return render(request, "main/view-todo.html", {"todos": todos,"temptext":text4search})

def todolist(request: HttpRequest) -> HttpResponse:
    todos = post_queries.list_published() #запрашиваем все объекты todo через менеджер объектов
    if request.method == "POST": #проверяем то что метод именно POST
        if "Delete" in request.POST: #если пользователь собирается удалить одно дело
            delete_todo.run(request.POST.getlist('checkedbox'))        
    return render(request, "main/index.html", {"todos": todos})

def create_view(request: HttpRequest) -> HttpResponse:   
    if "Add" in request.POST:
        create_new_todo.run(
            title=request.POST.get('title'),
            description=request.POST.get('description'),
            is_done=bool(request.POST.get('is_done'))
        )
        return redirect("/create/")   
    return render(request, "main/create.html")

def edit(request: HttpRequest) -> HttpResponse:
    todos = post_queries.list_published() #запрашиваем все объекты todo через менеджер объектов
    if "Edit" in request.POST: #проверяем метод добавления todo
            edit_todo.run(id=request.POST.get('checkedbox'),title=request.POST.get('title_new'),description=request.POST.get('description_new'), is_done=request.POST.get('is_done'))
            return redirect("/edit/") # перегрузка страницы (ну вот так у нас будет устроено очищение формы)        
    return render(request, "main/edit.html", {"todos": todos})